﻿/* Documentatie vervaardigd door Rick van Bodegraven - 0915335 - op 15-10-2010
 * 
 * Klasse zelf opgesteld door SpelLeider groep. Verbeterd en aangepast door Rick van Bodegraven. (15-10-2010, 16-10-2010)
 * 
 * Deze klasse is de representatie van de speelkaarten. 
 * Let even op het feit dat er 2 constructors zijn
 */ 
using Roborally.CommonData.Enums;

namespace Roborally.CommonData.GlobaleTypes
{
    /// <summary>
    /// De klasse die een speelkaart representeert. Option kaarten hebben een eigen klasse (als ze überhaupt geimplementeerd gaan worden).
    /// </summary>
    public class ProgramKaart : IProgramKaart
    {
        #region Fields en Properties
        private KaartSoort soort;
        private int prioriteit;
        private int aantalStappen;

        /// <summary>
        /// De prioriteit van deze kaart
        /// </summary>
        public int Prioriteit { get { return prioriteit; } }

        /// <summary>
        /// Het soort kaart (vooruit, achteruit, links, rechts, draaien, etc)
        /// </summary>
        /// <returns></returns>
        public KaartSoort SoortKaart { get { return soort; } }
        
        /// <summary>
        /// Het aantal stappen, als dit toepasselijk is, dat deze kaart zal doen (bijvoorbeeld 3 vooruit of 1 achteruit, etc)
        /// </summary>
        public int AantalStappen { get { return aantalStappen; } }
        #endregion
        
        /// <summary>
        /// Constructor voor een ProgramKaart die geen stappen doet (links/rechts draaien bijvoorbeeld)
        /// </summary>
        /// <param name="soort">Wat voor kaart is dit? Gebruik de Enum om het aan te geven!</param>
        /// <param name="prioriteit">Prioriteit van deze kaart</param>
        public ProgramKaart(KaartSoort soort, int prioriteit)
        {
            this.soort = soort;
            this.prioriteit = prioriteit;
        }

        /// <summary>
        /// Constructor voor een ProgramKaart die wél stappen doet (vooruit bijvoorbeeld)
        /// </summary>
        /// <param name="soort">Wat voor kaart is dit? Gebruik de Enum om het aan te geven!</param>
        /// <param name="prioriteit">Prioriteit van deze kaart</param>
        /// <param name="aantalStappen">Hoeveel stappen de kaart zet</param>
        public ProgramKaart(KaartSoort soort, int prioriteit, int aantalStappen)
        {
            this.soort = soort;
            this.prioriteit = prioriteit;
            this.aantalStappen = aantalStappen;
        }

        /// <summary>
        /// Deze method doet hetzelfde als de property, maar deze staat in de interface. Beide doen in principe hetzelfde
        /// </summary>
        /// <returns>Retourneert wat voor soort kaart dit is</returns>
        public KaartSoort GetSoort()
        {
            return soort;
        }
    }
}
